3.1 任务描述
前置任务:C4-002
业务模块:主视图界面
创建页面布局
任务类型:按步骤操作
3.2 详细实现步骤
系统主要功能分为“明细”、“统计”、“我的”等三个部分,因此需要为每个功能设计页面。
修改主布局文件
在res/layout/activity_main.xml文件中,添加ViewPager组件,实现页面的管理。ViewPager组件是一个容器,允许左右滑动页面,从而实现在不同页面之间的翻转,经常和Fragment等一起使用。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="cn.edu.bistu.cs.se.accountbook.MainActivity">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/navigation"
>
</android.support.v4.view.ViewPager>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
</android.support.constraint.ConstraintLayout>
创建
图 8 创建MyPagerAdapter类
可以看到,Android Studio为我们生成了MyPagerAdapter类,但是类为空的,我们需要重载其方法,并添加相应数据成员。在类名上单击右键,然后在弹出的菜单中选择“generate…”,如下所示。也可以依次单击菜单“Code”、“generate…”。
图 9 在弹出的菜单中选择“generate…”
在弹出的菜单中选择“implement methods…”,也可以依次单击菜单“Code”、“Implement methods…”。Android Studio弹出“Select Methods to Implement”对话框,如下所示,将两个方法全部选上,然后单击“OK”按钮。
图 10 实现方法
同上类似,再次在类名上单击右键,依次选择菜单“generate…”、“Constructor”,生成构造函数。
然后再次在类名上单击右键,依次选择菜单“generate…”、“Overide methods…”,也可以依次单击菜单“Code”、““Overide methods…”,Android Studio弹出“Select Methods to Override。Implement”对话框,如下所示,这里选择重载“instantiateItem”、“destroyItem”两个方法,如下图所示。
图 11 重载方法
然后为该类添加数据成员,并修改代码,修改完后的代码如下所示:
package cn.edu.bistu.cs.se.accountbook;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by hbs on 2017-11-27.
*/
public class MyPagerAdapter extends PagerAdapter {
private List<View> viewList = null;
public MyPagerAdapter(List<View> viewList) {
this.viewList = viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
3.3 添加布局文件
由于“个人记账本”主要有三个功能模块,这里为每个功能模块添加一个布局文件。在res/layout文件夹中添加layout_details.xml、layout_statistics.xml、layout_own.xml布局文件,分别对应“明细”、“统计”、“我的”等三个功能部分。文件结构如下所示:
图 12 文件结构
简单起见,目前这三个布局文件都可以为空,以layout_details.xml为例,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
程序运行界面:
图 13 底部导航栏程序运行界面
3.4 根据功能修改布局文件
3.4.1 修改“明细”布局文件
“明细”功能主要包括增加收入、增加支出等,在增加收入和支出时,需要输入类型和金额等;并且将收入和支出的明细显示出来,这里使用ListView控件进行显示。
根据上述功能,设计界面如下:
图 14 “明细”界面
设计布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridLayout
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:columnCount="3"
android:orientation="horizontal">
<TextView android:text="收入类型"
/>
<Spinner
android:id="@+id/spinnerEarningType"
android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:layout_columnWeight="2"
/>
<Button
android:id="@+id/buttonNewEarning"
android:layout_gravity="fill"
android:layout_rowSpan="2"
android:layout_columnWeight="1"
android:text="新收入" />
<TextView android:text="金额" />
<EditText
android:id="@+id/txtEarningAmount"
android:layout_gravity="fill_horizontal" />
<!--分割条-->
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_columnSpan="3"
android:background="#cbcbcb" />
<TextView android:text="支出类型" />
<Spinner
android:id="@+id/spinnerExpenditureType"
android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal" />
<Button
android:id="@+id/buttonNewExpenditure"
android:layout_gravity="fill"
android:layout_rowSpan="2"
android:text="新支出" />
<TextView android:text="金额" />
<EditText
android:id="@+id/txtExpenditureAmount"
android:layout_gravity="fill_horizontal" />
<!--分割条-->
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_columnSpan="3"
android:background="#cbcbcb" />
</GridLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/grid"
>
<ListView
android:id="@+id/ListEarnings"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="fill_vertical"
android:layout_columnWeight="1" >
</ListView>
<ListView
android:id="@+id/ListExpenditures"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:layout_columnWeight="1" >
</ListView>
</LinearLayout>
</RelativeLayout>
3.4.2 修改“统计”布局文件
“统计”功能主要包括显示特定日期下的收入和支出金额。界面上能够让用户选择日期,并进行查询。
根据以上功能,设计布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editTextDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:ems="10"
android:inputType="date" />
<Button
android:id="@+id/buttonDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/editTextDate"
android:text="日期" />
<Button
android:id="@+id/buttonQuery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:text="查询" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/buttonDate"
android:layout_toStartOf="@+id/buttonDate">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView android:text=""
android:id="@+id/textviewEarnings"
/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView android:text=""
android:id="@+id/textviewExpenditures"
/>
</TableRow>
</TableLayout>
</RelativeLayout>
3.4.3 修改“我的”布局文件
“我的”界面功能主要包括显示个人资产情况,界面比较简单。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textviewOwn"
/>
</RelativeLayout>